#ifndef _image_process_hpp_
#define _image_process_hpp_

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/freetype.hpp>
#include <opencv2/xphoto/white_balance.hpp>
#include <opencv2/imgcodecs.hpp>

using namespace std;
using namespace cv;
using namespace cv::xphoto;

#define WHITE_TEXT CV_RGB(255,255,255)
#define ORA_TEXT   CV_RGB(0,165,255)

#define brightness_def 100                          //亮度默认值
#define contrast_def 1.0                            //对比度默认值
#define r_hue_def     50                            //红色色调默认值
#define g_hue_def     50                            //绿色色调默认值
#define b_hue_def     50                            //蓝色色调默认值
#define sharpness_def 0                             //锐度默认值
#define blur_def      0                             //模糊度默认值

typedef struct MENU                                 //菜单结构体
{
    bool        text;                               //是否显示菜单界面
    bool        record;                             //录屏开关
    uint8_t     mount;                              //挂载成功标志,0表示不显示，1表示挂载错误，2表示挂载成功,3表示弹出成功
    uint8_t     target;                             //当前指向的目标
    uint8_t     AWB;                                //白平衡校准
    uint32_t    brightness;                         //亮度  0 - 200
    double      contrast;                           //对比度
    int         r_hue;                              //红色色调
    int         g_hue;                              //绿色色调
    int         b_hue;                              //蓝色色调
    bool        multiple;                           //放大倍数
    uint8_t     sharpness;                          //锐化
    int         blur;                               //图像模糊度
    bool        mask;                               //图像边缘加遮罩
}MENU;

void menu_init(MENU * menu);

void menu_copy(MENU menu,MENU *menu_cp);

cv::Scalar image_gain_awb(const cv::Mat& src_rgb);

void image_brightness_contrast(Mat & frame,MENU menu);

void image_adjustRGBHues(cv::Mat & frame, MENU menu);

void image_zoom(cv::Mat & frame);

void image_USM(cv::Mat& frame,MENU menu);

void image_blur(cv::Mat & frame,MENU menu);

void image_circle(cv::Mat & frame);

void image_resize(Mat & frame,uint32_t dst_width,uint32_t dst_height);

void image_fit(cv::Mat & frame,uint32_t dst_width,uint32_t dst_height);

void image_menu_update(Mat frame,MENU * menu,Ptr <freetype::FreeType2> ft2);

void image_RGB_to_XRGB(cv::Mat frame,uint32_t * drm_show_buf);

#endif

